如果當你在ViewModel中宣告一個SharedFlow
val shareFlow = MutableShareFlow<Int>()
在使用時候你會發現emit
是一個suspend function
,所以都必須透過coroutineScope
來呼叫
class MyViewModel: ViewModel{
val shareFlow = MutableShareFlow<Int>()
fun test() {
viewModelScope.launch {
shareFlow.emit(3)
}
}
}
然後你會發現,他其實有一個tryEmit
,而且還不需要透過coroutineScope
來執行,這樣不是超級方便的嗎,少寫很多行
結果你發現你改寫這樣後
class MyViewModel: ViewModel{
val shareFlow = MutableShareFlow<Int>()
fun test() {
shareFlow.tryEmit(3)
}
}
居然就沒反應了,先說結果,其實你誤用tryEmit
這個funciton了
根據說明
tryEmit
其實他是當下讓你用來測試當下是否能夠進行emit,如果buffer已經滿了,他回透過回傳boolean
來告訴你,你可以藉著進行一些處理
因此不要會誤以為tryEmit
就是一個不需要加上coroutineScope
的方法。